package com.it.schoolbookshop_back.service;

import com.it.schoolbookshop_back.entities.po.Notification;
import com.it.schoolbookshop_back.enums.NotificationType;

import java.util.List;

/**
 * 通知服务接口
 */
public interface NotificationService {
    
    /**
     * 创建并保存通知，同时根据用户设置决定是否发送WebSocket消息
     * 
     * @param userId 接收用户ID
     * @param type 通知类型
     * @param content 通知内容
     * @param relatedId 关联记录ID
     * @return 是否成功创建通知
     */
    boolean createNotification(Integer userId, NotificationType type, String content, Integer relatedId);
    
    /**
     * 获取用户所有通知
     * 
     * @param userId 用户ID
     * @return 通知列表
     */
    List<Notification> getUserNotifications(Integer userId);
    
    /**
     * 获取用户特定类型的通知
     * 
     * @param userId 用户ID
     * @param type 通知类型
     * @return 通知列表
     */
    List<Notification> getUserNotificationsByType(Integer userId, NotificationType type);
    
    /**
     * 标记通知为已读
     * 
     * @param notificationId 通知ID
     * @return 是否成功标记
     */
    boolean markAsRead(Integer notificationId);
    
    /**
     * 标记用户所有通知为已读
     * 
     * @param userId 用户ID
     * @return 是否成功标记
     */
    boolean markAllAsRead(Integer userId);
    
    /**
     * 获取用户未读通知数量
     * 
     * @param userId 用户ID
     * @return 未读通知数量
     */
    int getUnreadCount(Integer userId);
    
    /**
     * 获取用户特定类型的未读通知数量
     * 
     * @param userId 用户ID
     * @param type 通知类型
     * @return 未读通知数量
     */
    int getUnreadCountByType(Integer userId, NotificationType type);
    
    /**
     * 删除通知
     * 
     * @param notificationId 通知ID
     * @return 是否成功删除
     */
    boolean deleteNotification(Integer notificationId);
    
    /**
     * 发送WebSocket消息通知
     * 
     * @param userId 用户ID
     * @param content 通知内容
     * @return 是否成功发送
     */
    boolean sendWebSocketNotification(Integer userId, String content);
} 